#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
统一配置入口

提供项目配置的统一入口，简化配置的使用。
整合了所有配置功能，包括环境变量、数据库、日志等。

使用示例:
    from settings.config import config, logger
    
    # 获取数据库配置
    db_url = config.database.get_database_url()
    
    # 使用日志
    logger.info("应用启动")
    
    # 获取Flask配置
    flask_config = config.get_flask_config()

作者: AI Assistant
创建时间: 2024
"""

import os
from typing import Dict, Any, Optional
from pathlib import Path

# 加载环境变量
try:
    from dotenv import load_dotenv
    # 加载.env文件
    env_path = Path(__file__).parent.parent / '.env'
    if env_path.exists():
        load_dotenv(env_path)
        print(f"✓ 已加载环境配置文件: {env_path}")
    else:
        print(f"⚠️ 环境配置文件不存在: {env_path}")
except ImportError:
    print("⚠️ python-dotenv未安装，跳过.env文件加载")

# 导入配置管理器
from .config_manager import ConfigManager
# 移除了env_config依赖，现在直接使用os.getenv()
from .logger_config import get_logger

# 确定设置目录路径
SETTINGS_DIR = Path(__file__).parent

# 创建全局配置管理器实例
_config_manager = None


def get_config_manager() -> ConfigManager:
    """
    获取全局配置管理器实例
    
    Returns:
        ConfigManager: 配置管理器实例
    """
    global _config_manager
    if _config_manager is None:
        _config_manager = ConfigManager(
            config_file=None  # 新配置系统不使用配置文件
        )
    return _config_manager


# 全局配置实例
config = get_config_manager().config

# 全局日志实例
logger = get_logger('wechat_robot')

# 环境变量
env = os.getenv('FLASK_ENV', 'development')


def init_config(config_file: Optional[str] = None, env_override: Optional[str] = None) -> ConfigManager:
    """
    初始化配置
    
    Args:
        config_file (str, optional): 配置文件路径
        env_override (str, optional): 环境覆盖
        
    Returns:
        ConfigManager: 配置管理器实例
    """
    global _config_manager, config, logger
    
    if env_override:
        os.environ['FLASK_ENV'] = env_override
    
    _config_manager = ConfigManager(
        config_file=config_file or (str(CONFIG_FILE) if CONFIG_FILE.exists() else None)
    )
    
    config = _config_manager.config
    logger = get_logger('wechat_robot')
    
    return _config_manager


def get_database_url() -> str:
    """
    获取数据库连接URL
    
    Returns:
        str: 数据库连接URL
    """
    return config.database.get_database_url()


def get_flask_config() -> Dict[str, Any]:
    """
    获取Flask配置字典
    
    Returns:
        Dict[str, Any]: Flask配置字典
    """
    return config.get_flask_config()


def is_development() -> bool:
    """
    判断是否为开发环境
    
    Returns:
        bool: 是否为开发环境
    """
    return env == 'development'


def is_testing() -> bool:
    """
    判断是否为测试环境
    
    Returns:
        bool: 是否为测试环境
    """
    return env == 'testing'


def is_production() -> bool:
    """
    判断是否为生产环境
    
    Returns:
        bool: 是否为生产环境
    """
    return env == 'production'


def validate_config() -> Dict[str, Any]:
    """
    验证配置
    
    Returns:
        Dict[str, Any]: 验证结果
    """
    return get_config_manager().validate_config()


def print_config_summary():
    """
    打印配置摘要
    """
    print(f"当前环境: {env}")
    print(f"数据库类型: {config.database.type}")
    print(f"日志级别: {config.logger.level}")
    print(f"Flask调试模式: {config.flask.debug}")
    print(f"微信自动回复: {config.wechat.auto_reply_enabled}")
    print(f"新闻推送: {config.news.push_enabled}")


def create_default_config():
    """
    创建默认配置文件
    """
    config_manager = get_config_manager()
    config_manager.save_to_file(str(CONFIG_FILE))
    print(f"已创建默认配置文件: {CONFIG_FILE}")


def setup_directories():
    """
    设置必要的目录
    """
    from pathlib import Path
    
    directories = [
        Path(config.paths.log_dir),
        Path(config.paths.backup_dir),
        Path(config.paths.temp_dir)
    ]
    
    for directory in directories:
        directory.mkdir(parents=True, exist_ok=True)
        logger.debug(f"确保目录存在: {directory}")


# 自动设置目录
if not is_testing():
    setup_directories()


# 导出主要接口
__all__ = [
    'config',
    'logger',
    'env',
    'init_config',
    'get_config_manager',
    'get_database_url',
    'get_flask_config',
    'is_development',
    'is_testing',
    'is_production',
    'validate_config',
    'print_config_summary',
    'create_default_config',
    'setup_directories',

]